package com.sojson.util.file.interfaces;

import java.util.Arrays;
import java.util.List;

import com.sojson.entity.bo.FileField;
import com.sojson.entity.bo.FileTable;

/**
 * 
 * 
 * @author liu
 * @date 2021-09-06
 */
public interface FileTableInterface {

    /**
     * 获取类型代码
     * 
     * @return
     */
    int getCode();

    /**
     * 设置类型代码
     * 
     * @param code
     */
    void setCode(int code);

    /**
     * 获取表名
     * 
     * @return
     */
    String getTableName();

    /**
     * 设置表名
     * 
     * @param tableName
     */
    void setTableName(String tableName);

    /**
     * 获取订单关联关系表名集合
     * 
     * @return
     */
    List<FileTable> getTableNameOrders();

    /**
     * 设置订单关联关系表名集合
     * 
     * @param tableNameOrders
     */
    void setTableNameOrders(List<FileTable> tableNameOrders);

    /**
     * 获取字段列表
     * 
     * @return
     */
    List<FileField> getFields();

    /**
     * 设置字段列表
     * 
     * @param fileds
     */
    void setFields(List<FileField> fields);

    /**
     * 获取文件字段
     * 
     * @param fieldName 字段名
     * @param queryType 查询类型(1:==,2:逗号分隔)
     * @return
     */
    static FileField field(String fieldName, Integer queryType) {
        FileField fileField = new FileField();
        fileField.setName(fieldName);
        fileField.setQueryType(queryType);
        fileField.setIsOrderRelation(false);
        return fileField;
    }

    /**
     * 获取文件字段
     * 
     * @param fieldName         字段名
     * @param queryType         查询类型(1:==,2:逗号分隔)
     * @param isOrderRelation   是否是订单关联关系(true:是,false:否)
     * @return
     */
    static FileField field(String fieldName, Integer queryType, Boolean isOrderRelation) {
        FileField fileField = new FileField();
        fileField.setName(fieldName);
        fileField.setQueryType(queryType);
        fileField.setIsOrderRelation(isOrderRelation);
        return fileField;
    }

    /**
     * 获取文件字段
     * 
     * @param resourceFieldName 源字段名
     * @param targetFieldName   目标字段名
     * @param queryType         查询类型(1:==,2:逗号分隔)
     * @return
     */
    static FileField field(String resourceFieldName, String targetFieldName, Integer queryType) {
        FileField fileField = new FileField();
        fileField.setResourceName(resourceFieldName);
        fileField.setName(targetFieldName);
        fileField.setQueryType(queryType);
        return fileField;
    }

    /**
     * 获取文件字段列表
     * 
     * @param fileField
     * @return
     */
    static List<FileField> fields(FileField... fileField) {
        return Arrays.asList(fileField);
    }

    /**
     * 获取文件表
     * 
     * @param tableName
     * @param fileField
     * @return
     */
    static FileTable table(String tableName, List<FileField> fileField) {
        FileTable fileTable = new FileTable();
        fileTable.setTableName(tableName);
        fileTable.setFields(fileField);
        return fileTable;
    }

}